package HashMap.Nodo.Operaciones.Funciones;

import HashMap.Nodo.Nodo;
import HashMap.Nodo.Operacion;
import HashMap.Nodo.Subclases.Escalar;
import java.util.LinkedList;
import java.util.List;

public class Funciones implements Operacion {

    private Escalar nodo;
    private List<Nodo> parametros;
    private LinkedList<Operacion> operaciones;

    public Funciones(Escalar nodo, List<Nodo> parametros, LinkedList<Operacion> operaciones) {
        this.nodo = nodo;
        this.parametros = parametros;
        this.operaciones = operaciones;
    }

    @Override
    public int getLongitud() {
        throw new UnsupportedOperationException("Operacion no soportada");
    }

    @Override
    public String generarCodigoNASM() {
        StringBuilder builder = new StringBuilder();
        for (Nodo nodoAux : parametros) {
            builder.append("mov [");
            builder.append(nodoAux.getNombre());
            builder.append("], top\n");
            builder.append("pop\n");
        }
        for (Operacion operacionAux : operaciones) {
            builder.append(operacionAux.generarCodigoNASM());
            builder.append("\n");
        }
        return builder.toString();
    }

    @Override
    public Nodo generarNodo(String tokenOperacion) {
        nodo.setNumeroDeParametros(parametros.size());
        return nodo;
    }
}
